Skip to content

NoSQL数据库

1.1 各种NoSQL数据库的优势

需求特征推荐 NoSQL 类型
极高速度、简单读写键值存储 (Redis)
快速迭代、数据结构多变文档数据库 (MongoDB)
海量数据写入、高可用列族数据库 (Cassandra/HBase)
深度关联关系、路径追踪图数据库 (Neo4j)
复杂关键词检索、统计分析搜索引擎 (Elasticsearch)

1.2 成熟系统中(如典型的电商或社交平台)各个数据库搭配使用情况

1. 核心存储层:关系型数据库 (MySQL / PostgreSQL)

这是系统的“真理来源”(Source of Truth)。

  • 存储内容: 用户账号、订单记录、财务支付、权限配置等。
  • 为什么用: * ACID 事务: 保证钱和订单不能出错。
    • 复杂查询: 支持多表 Join 和严谨的逻辑关系。
  • 搭配策略: 读写分离。主库负责写,多个从库(Read Replicas)负责读,分担压力。

2. 高速缓存层:键值存储 (Redis)

位于应用层和数据库之间,是系统的“加速器”。

  • 存储内容: 热点商品信息、用户 Session、验证码、全局配置、排行榜。
  • 为什么用: 内存操作,读写延迟在微秒级。
  • 搭配策略: Cache-Aside 模式
    1. 程序先查 Redis。
    2. Redis 没有,再查 MySQL。
    3. 查完回写 Redis,并设置过期时间(TTL)。

3. 搜索与分析层:搜索引擎 (Elasticsearch)

当 MySQL 的 LIKE %keyword% 慢到无法接受时,它就上场了。

  • 存储内容: 商品全文索引、日志数据(ELK 栈)、复杂的组合筛选条件。
  • 为什么用: 倒排索引技术,支持毫秒级的关键词模糊匹配和多维度聚合。
  • 搭配策略: 数据同步。通过 Canal 监听 MySQL 的 Binlog 或在 Service 层异步写入,将需要搜索的数据同步到 ES。

4. 扩展存储层:文档数据库 (MongoDB)

处理“不规则”或“频繁变动”的数据。

  • 存储内容: 商品详情描述(参数多变)、用户动态/朋友圈、站内信、评论。
  • 为什么用: 无需预定义表结构(Schema-free),开发效率极高,扩容方便。
  • 搭配策略: 作为 MySQL 的补充,存储那些不需要强关联、但结构复杂的数据。

5. 大数据/指标层:列族存储 (HBase / Cassandra) 或 时序数据库 (InfluxDB)

处理“海量写入”和“时间线”数据。

  • 存储内容: 用户行为埋点、传感器数据、快递物流轨迹。
  • 为什么用: 针对写操作极大优化,能承受每秒万级甚至十万级的写入。

一个完整的请求链路示例

想象你在某 App 搜索并购买一件衣服:

  1. 搜索: 请求进入系统,首先由 Elasticsearch 提供模糊匹配,给出商品列表。
  2. 详情: 你点击进入详情页,系统从 Redis 获取缓存好的商品详情;如果没缓存,去 MongoDB 读取非结构化的规格参数。
  3. 下单: 你点击购买,系统在 MySQL 中开启事务:扣减库存、生成订单、扣除余额(此时必须保证强一致性)。
  4. 足迹: 你的浏览行为被异步写入 HBaseClickHouse,用于后续的大数据推荐分析。